// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.google.gson.internal.bind;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
// Referenced classes of package com.google.gson.internal.bind:
// d
public final class JsonTreeReader extends JsonReader
{
private static final Reader a = new d();
private static final Object b = new Object();
private final List c = new ArrayList();
public JsonTreeReader(JsonElement jsonelement)
{
super(a);
c.add(jsonelement);
}
private Object a()
{
return c.get(-1 + c.size());
}
private void a(JsonToken jsontoken)
{
if (peek() != jsontoken)
{
throw new IllegalStateException((new StringBuilder()).append("Expected ").append(jsontoken).append(" but was ").append(peek()).toString());
} else
{
return;
}
}
private Object b()
{
return c.remove(-1 + c.size());
}
public void beginArray()
{
a(JsonToken.BEGIN_ARRAY);
JsonArray jsonarray = (JsonArray)a();
c.add(jsonarray.iterator());
}
public void beginObject()
{
a(JsonToken.BEGIN_OBJECT);
JsonObject jsonobject = (JsonObject)a();
c.add(jsonobject.entrySet().iterator());
}
public void close()
{
c.clear();
c.add(b);
}
public void endArray()
{
a(JsonToken.END_ARRAY);
b();
b();
}
public void endObject()
{
a(JsonToken.END_OBJECT);
b();
b();
}
public boolean hasNext()
{
JsonToken jsontoken = peek();
return jsontoken != JsonToken.END_OBJECT && jsontoken != JsonToken.END_ARRAY;
}
public boolean nextBoolean()
{
a(JsonToken.BOOLEAN);
return ((JsonPrimitive)b()).getAsBoolean();
}
public double nextDouble()
{
JsonToken jsontoken = peek();
if (jsontoken != JsonToken.NUMBER && jsontoken != JsonToken.STRING)
{
throw new IllegalStateException((new StringBuilder()).append("Expected ").append(JsonToken.NUMBER).append(" but was ").append(jsontoken).toString());
}
double d1 = ((JsonPrimitive)a()).getAsDouble();
if (!isLenient() && (Double.isNaN(d1) || Double.isInfinite(d1)))
{
throw new NumberFormatException((new StringBuilder()).append("JSON forbids NaN and infinities: ").append(d1).toString());
} else
{
b();
return d1;
}
}
public int nextInt()
{
JsonToken jsontoken = peek();
if (jsontoken != JsonToken.NUMBER && jsontoken != JsonToken.STRING)
{
throw new IllegalStateException((new StringBuilder()).append("Expected ").append(JsonToken.NUMBER).append(" but was ").append(jsontoken).toString());
} else
{
int i = ((JsonPrimitive)a()).getAsInt();
b();
return i;
}
}
public long nextLong()
{
JsonToken jsontoken = peek();
if (jsontoken != JsonToken.NUMBER && jsontoken != JsonToken.STRING)
{
throw new IllegalStateException((new StringBuilder()).append("Expected ").append(JsonToken.NUMBER).append(" but was ").append(jsontoken).toString());
} else
{
long l = ((JsonPrimitive)a()).getAsLong();
b();
return l;
}
}
public String nextName()
{
a(JsonToken.NAME);
java.util.Map.Entry entry = (java.util.Map.Entry)((Iterator)a()).next();
c.add(entry.getValue());
return (String)entry.getKey();
}
public void nextNull()
{
a(JsonToken.NULL);
b();
}
public String nextString()
{
JsonToken jsontoken = peek();
if (jsontoken != JsonToken.STRING && jsontoken != JsonToken.NUMBER)
{
throw new IllegalStateException((new StringBuilder()).append("Expected ").append(JsonToken.STRING).append(" but was ").append(jsontoken).toString());
} else
{
return ((JsonPrimitive)b()).getAsString();
}
}
public JsonToken peek()
{
if (c.isEmpty())
{
return JsonToken.END_DOCUMENT;
}
Object obj = a();
if (obj instanceof Iterator)
{
boolean flag = c.get(-2 + c.size()) instanceof JsonObject;
Iterator iterator = (Iterator)obj;
if (iterator.hasNext())
{
if (flag)
{
return JsonToken.NAME;
} else
{
c.add(iterator.next());
return peek();
}
}
if (flag)
{
return JsonToken.END_OBJECT;
} else
{
return JsonToken.END_ARRAY;
}
}
if (obj instanceof JsonObject)
{
return JsonToken.BEGIN_OBJECT;
}
if (obj instanceof JsonArray)
{
return JsonToken.BEGIN_ARRAY;
}
if (obj instanceof JsonPrimitive)
{
JsonPrimitive jsonprimitive = (JsonPrimitive)obj;
if (jsonprimitive.isString())
{
return JsonToken.STRING;
}
if (jsonprimitive.isBoolean())
{
return JsonToken.BOOLEAN;
}
if (jsonprimitive.isNumber())
{
return JsonToken.NUMBER;
} else
{
throw new AssertionError();
}
}
if (obj instanceof JsonNull)
{
return JsonToken.NULL;
}
if (obj == b)
{
throw new IllegalStateException("JsonReader is closed");
} else
{
throw new AssertionError();
}
}
public void promoteNameToValue()
{
a(JsonToken.NAME);
java.util.Map.Entry entry = (java.util.Map.Entry)((Iterator)a()).next();
c.add(entry.getValue());
c.add(new JsonPrimitive((String)entry.getKey()));
}
public void skipValue()
{
if (peek() == JsonToken.NAME)
{
nextName();
return;
} else
{
b();
return;
}
}
public String toString()
{
return getClass().getSimpleName();
}
}